Virtualization allows multiplexing of the underlying host machine between different virtual machines. The host computer allocates a certain amount of its resources to each of the virtual machines. Each virtual machine is then able to use the allocated resources to execute applications, including operating systems (referred to as guest operating systems). The software layer providing the virtualization is commonly referred to as a hypervisor and is also known as a virtual machine monitor (VMM), a kernel-based hypervisor or a host operating system. The hypervisor emulates the underlying hardware of the host computer, making the use of the virtual machine transparent to the guest operating system and the user of the computer.
In some systems, the host is a centralized server that is partitioned into multiple virtual machines to provide virtual desktops to users within an enterprise. An image of a virtual machine may include codebase of an operating system (a guest operating system) and applications running on the guest operating system, as well as libraries and data used by the guest operating system and the applications. The size of a typical virtual machine image is substantial. For example, an enterprise's virtual machine image is usually more than 10 GB. Hence, in an enterprise with 1,000 users, the storage requirement for virtual machine images is likely to exceed 10 TB. Maintaining such a large amount of storage is expensive and inefficient.